// pages/pointsMall/mall.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    prize_arr: [

    ],
    // 抽奖状态，是否转完了
    isTurnOver: true,
    integral: '' //用户持有的积分
  },

  // 点击抽奖
  clickPrize() {
    if (this.data.integral < 150) {
      wx.showToast({
        title: '积分不足',
        icon: 'none'
      })
      return;
    }

    // 如果不在抽奖状态中，则执行抽奖旋转动画
    if (this.data.isTurnOver) {
      // 把抽奖状态改为未完成
      this.setData({
        isTurnOver: false
      })
      wx.request({
        url: 'http://192.168.2.10:8099/getPrizeId', // 你后端的接口地址
        method: 'GET',
        success: (res) => {
          this.lottery(res.data.data);
        },
        fail: (err) => {
          console.log(err);
          wx.showToast({
            title: '抽奖失败',
            icon: 'none'
          })
        }
      })
    } else {
      wx.showToast({
        title: '请勿重复点击',
        icon: 'none'
      })
    }
  },

  // 抽奖旋转动画方法
  lottery(prize_id) {
    console.log('中奖ID：' + prize_id)
    let num_interval_arr = [90, 80, 70, 60, 50, 50, 50, 100, 150, 250];
    // 旋转的总次数
    let sum_rotate = num_interval_arr.length;
    // 每一圈所需要的时间
    let interval = 0;
    num_interval_arr.forEach((delay, index) => {
      setTimeout(() => {
        this.rotateCircle(delay, index + 1, sum_rotate, prize_id);
      }, interval)
      //因为每一圈转完所用的时间是不一样的，所以要做一个叠加操作
      interval += delay * 8;
    })
  },

  /*
   * 封装旋转一圈的动画函数，最后一圈可能不满一圈
   * delay:表示一个奖品跳到另一个奖品所需要的时间
   * index:表示执行到第几圈
   * sum_rotate：表示旋转的总圈数
   * prize_id：中奖后的id号
   */
  rotateCircle(delay, index, sum_rotate, prize_id) {
    // console.log(index)
    let _this = this;
    /*
     * 页面中奖项的实际数组下标
     * 0  1  2
     * 3     5
     * 6  7  8
     * 所以得出转圈的执行顺序数组为 ↓
     */
    let order_arr = [0, 1, 2, 5, 8, 7, 6, 3];
    // 页面奖品总数组
    let prize_arr = this.data.prize_arr;
    // 如果转到最后以前，把数组截取到奖品项的位置
    if (index == sum_rotate) {
      order_arr.splice(prize_id)
    }
    for (let i = 0; i < order_arr.length; i++) {
      setTimeout(() => {
        // 清理掉选中的状态
        prize_arr.forEach(e => {
          e.isSelected = false
        })
        // 执行到第几个就改变它的选中状态
        prize_arr[order_arr[i]].isSelected = true;
        // 更新状态
        _this.setData({
          prize_arr: prize_arr
        })
        // 如果转到最后一圈且转完了，把抽奖状态改为已经转完了
        if (index == sum_rotate && i == order_arr.length - 1) {
          _this.setData({
            isTurnOver: true
          })
          // 找到中奖的奖品
          let prize = _this.data.prize_arr.find(item => item.grid_id == prize_id);
          console.log(prize)
          if (prize) {
            // 显示中奖信息
            wx.showToast({
              title: '恭喜你抽中了' + prize.name,
              icon: 'none'
            })
          }
          let phone = wx.getStorageSync('phone'); // 假设你的token是存储在本地的
          wx.request({
            url: 'http://192.168.2.10:8099/buyCoupon1?id='+prize.id+'&phone='+phone,
            method: 'GET',
            success: (res) => {
              return;
            }
          })
        }
      }, delay * i)
    }
  },

  onClickLeft() {
    wx.navigateBack({
      delta: 1
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {},

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {
    const token = wx.getStorageSync('token');
    if (!token) {
      wx.navigateTo({
        url: '/pages/loginPage/loginPage',
      })
    }
    wx.request({
      url: 'http://localhost:8010/getAppUserInfo?token=' + token,
      method: "POST", // 注意这里修改为 "POST"
      success: (res) => {
        if (res.data.code === 200) {
          this.setData({
            integral: res.data.data.integral,
          });
        }
      },
      fail: (error) => {
        console.error(error); // 请求失败的处理逻辑
      }
    });
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    this.getPrizeListIfNeeded();

  },

  getPrizeListIfNeeded() {
    const lastFetchTime = wx.getStorageSync('lastFetchTime');
    const now = new Date().getTime();
    const oneDay = 24 * 60 * 60 * 1000;
    const fiveDays = 5 * oneDay;

    // 如果没有获取过数据，或者上次获取数据已经过去五天，那么获取新的数据
    if (!lastFetchTime || (now - lastFetchTime >= fiveDays)) {
      this.getPrizeList();
    } else {
      const savedPrizeArr = wx.getStorageSync('prize_arr');
      if (savedPrizeArr) {
        this.setData({
          prize_arr: savedPrizeArr
        });
      }
    }
  },

  getPrizeList() {
    wx.request({
      url: 'http://localhost:8099/queryAll',
      method: 'GET',
      success: (res) => {
        let prizeData = res.data;
        // 假设你的抽奖按钮数据如下：
        let lotteryButton = {
          id: '4',
          type: 'btn',
          name: '按钮'
          // 其他需要的属性...
        };
        // 将第五个奖品替换为抽奖按钮
        if (prizeData.length >= 4) {
          prizeData.splice(4, 0, lotteryButton);
        }
        // 九宫格的顺序映射
        let gridOrder = [1, 2, 3, 8, 0, 4, 7, 6, 5];
        // 给每个优惠券（除了按钮）分配一个ID
        prizeData.forEach((item, index) => {
          if (item.type !== 'btn') {
            item.grid_id = gridOrder[index];
          }
        });
        this.setData({
          prize_arr: prizeData
        });
        // 存储获取数据的时间
        wx.setStorageSync('lastFetchTime', new Date().getTime());
        wx.setStorageSync('prize_arr', this.data.prize_arr)
      },
      fail: (err) => {
        console.log(err);
        wx.showToast({
          title: '数据加载失败',
          icon: 'none'
        })
      }
    })
  },
  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})